#include <stdio.h>
//指针数组
// int main()
// {
//     int arr1[5] = {1,2,3,4,5};
//     int arr2[5] = {6,7,8,9,10};
//     int arr3[5] = {11,12,13,14,15};
//     int* arr[] = {arr1,arr2,arr3};
//     for(int i = 0;i < 3;i++)
//     {
//         for(int j = 0;j < 5;j++)
//         {
//             //printf("%d ",*(*(arr+i)+j));
//             printf("%d ",arr[i][j]);
//         }
//         printf("\n");
//     }
//     return 0;
// }

//数组指针
// int main()
// {
//     int arr[10] = {1,2,3,4,5,6,7,8,9,10};
//     int (*p) [10] = &arr;
//     for(int i = 0;i < 10;i++)
//     {
//         printf("%d ",*((*p)+i));
//     }
//     return 0;
// }

//二维数组传参的本质
// void Print(int(*arr)[5],int r,int c)//形参部分可以写成指针的形式
// {
//     for(int i = 0;i < 3;i++)
//     {
//         for(int j = 0;j < 5;j++)
//         {
//             printf("%d ",*(*(arr+i)+j));
//         }
//         printf("\n");
//     }
// }
// int main()
// {
//     int arr[3][5] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
//     Print(arr,3,5);
//     return 0;
// }

//模拟二维数组
// void Print(int** arr,int r,int c)//形参部分可以写成指针的形式
// {
//     for(int i = 0;i < 3;i++)
//     {
//         for(int j = 0;j < 5;j++)
//         {
//             printf("%d ",*(*(arr+i)+j));
//             //printf("%d ",arr[i][j]);
//         }
//         printf("\n");
//     }
// }
// int main()
// {
//     int arr1[5] = {11,12,13,14,15};
//     int arr2[5] = {16,17,18,19,20};
//     int arr3[5] = {21,22,23,24,25};
//     int* arr[3] = {arr1,arr2,arr3};
//     Print(arr,3,5);
//     return 0;
// }

//函数指针
// int Add(int x,int y)
// {
//     return x + y;
// }
// int main()
// {
//     int (*pf)(int,int) = Add;
//     printf("%d\n",pf(10,12));
//     return 0;
// }

//函数指针数组
// int Add(int x,int y)
// {
//     return x + y;
// }
// int Sub(int x,int y)
// {
//     return x - y;
// }
// int Mul(int x,int y)
// {
//     return x * y;
// }
// int Div(int x,int y)
// {
//     return x / y;
// }
// int main()
// {
//     int (*pf[4])(int,int) = {Add,Sub,Mul,Div};
//     for(int i = 0;i < 4;i++)
//     {
//         printf("%d ",pf[i](20,10));
//     }
//     return 0;
// }


// #include <stdlib.h>
// //malloc模拟二维数组
// int main()
// {
//     int** arr = (int**)malloc(sizeof(int*)*3);
//     for(int i = 0;i < 3;i++)
//     {
//         *(arr+i) = (int*)malloc(sizeof(int)*5);
//     }
//     //初始化
//     for(int i = 0;i < 3;i++)
//     {
//         for(int j = 0;j < 5;j++)
//         {
//             *(*(arr+i)+j) = i + j + 1;
//         }
//     }
//     //打印
//     for(int i = 0;i < 3;i++)
//     {
//         for(int j = 0;j < 5;j++)
//         {
//             printf("%d ",*(*(arr+i)+j));
//         }
//         printf("\n");
//     }
//     //释放资源
//     for(int i = 0;i < 3;i++)
//     {
//         free(*(arr+i));
//         *(arr+i) = NULL;
//     }
//     return 0;
// }

//指针数组
// int main()
// {
//     int arr1[5] = {1,2,3,4,5};
//     int arr2[5] = {6,7,8,9,10};
//     int arr3[5] = {11,12,13,14,15};
//     int* arr[3] = {arr1,arr2,arr3};
//     for(int i = 0;i < 3;i++)
//     {
//         for(int j = 0;j < 5;j++)
//         {
//             printf("%d ",*(*(arr+i)+j));
//         }
//         printf("\n");
//     }
//     return 0;
// }


//数组指针
// int main()
// {
//     int arr[10] = {1,2,3,4,5,6,7,8,9,10};
//     int (*p)[10] = &arr;
//     for(int i = 0;i < 10;i++)
//     {
//         printf("%d ",(*p)[i]);
//     }
//     return 0;
// }

//函数指针
// int Add(int x,int y)
// {
//     return x + y;
// }
// int main()
// {
//     int(*pf)(int,int) = Add;
//     printf("%d ",pf(2,3));
//     return 0;
// }

//函数指针数组
// int Add(int x,int y)
// {
//     return x + y;
// }
// int Sub(int x,int y)
// {
//     return x - y;
// }
// int Mul(int x,int y)
// {
//     return x * y;
// }
// int Div(int x,int y)
// {
//     return x / y;
// }
// int main()
// {
//     int input = 0;
//     int x ,y ;
//     int(*pf[4])(int,int) = {Add,Sub,Mul,Div};
//     printf("清输入选项:(0:加法,1:减法,2:乘法,3:除法)>");
//     scanf("%d",&input);
//     printf("请输入两个操作数:>");
//     scanf("%d %d",&x,&y);
//     printf("结果是:%d\n",pf[input](x,y));
//     return 0;
// }

// int main()
// {
// 	int a = 1;
// 	char* ch = (char*)&a;
// 	if (*ch == 1)
// 	{
// 		printf("小端\n");
// 	}
// 	return 0;
// }

// #include <stdio.h>
// int main()
// {
//  int n = 9;
//  float *pFloat = (float *)&n;
//  printf("n的值为：%d\n",n);
//  printf("*pFloat的值为：%f\n",*pFloat);
//  *pFloat = 9.0;
//  printf("num的值为：%d\n",n);
//  printf("*pFloat的值为：%f\n",*pFloat);
//  return 0;
// }

/*
1001 - 9
0 00000000 00000000000000000001001 - 9的原码,反码,补码
9.0
1001.0

*/
// struct S
// {
//     int a;
//     char c;
//     short d;
// };
// struct Seq
// {
//     int a;
//     char c;
//     short d;
//     struct S* s;
// };
// int main()
// {
//     struct Seq q;
//     printf("%ld\n",sizeof(q));
//     return 0;
// }

struct S
{
    int a;
    short d;
};

int main()
{
    struct S s = {11,12};
    printf("%d\n",s.a);
    printf("%d\n",s.d);
    return 0;
}


